﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;

namespace Innova.Microfinanzas.BusinessEntities
{
    public partial class Employee
    {
        public string FullName
        {
            get
                {
                    return FamilyName1 + " " + FamilyName2 + " " + Name; 
                }
        }

        public override string ToString()
        {
            return FullName;
        }
    }

    public partial class Country
    {
        public override string ToString()
        {
            return NameCountry;
        }
    }

    public partial class Role
    {
        public override string ToString()
        {
            return RoleName;
        }
    }

    public partial class User
    {
        public long IdStore
        {
            get;
            set;
        }

        public long IdDealerStore
        {
            get;
            set;
        }

        public string StoreName
        {
            get;
            set;
        }

        public decimal CurrentCurrencyExchange
        {
            get;
            set;
        }

        public string DealerStoreName
        {
            get;
            set;
        }

        public override string ToString()
        {
            return UserName;
        }
    }

    public partial class Command
    {
        public List<Command> ColChildCommands
        {
            get;
            set;
        }
    }

    public partial class Classifier
    {
        public override string ToString()
        {
            return Name;
        }
    }

    public class ProductNewOrderDetail
    {
        public Product ObjProduct
        { get; set; }

        public ProductPrice ObjPrice
        { get; set; }

        public int Quantity
        { get; set; }

        public decimal TotalDetail
        { get; set; }
    }

    public class CategoryRelationDetail
    {
        public Classifier ObjCategory
        { get; set; }

        public List<Classifier> ColProductType
        { get; set; }
    }

    public partial class Supplier
    {
        public override string ToString()
        {
            return Name;
        }
    }

    public partial class Store
    {
        public override string ToString()
        {
            return Name;
        }
    }

    public partial class DealerStore
    {
        public override string ToString()
        {
            return Name;
        }
    }

    public partial class Conveyor
    {
        public string ComposeName
        {
            get
            {
                return Code + " - " + FullName;
            }
        }
        public override string ToString()
        {
            return FullName;
        }
    }

    public partial class Product
    {
        public override string ToString()
        {
            return Model;
        }
    }

    public partial class ProductPrice
    {
        public override string ToString()
        {
            return SalePrice.ToString();
        }
    }

    public class DeliveryStockDetail
    {
        /// <summary>
        /// id del proveedor que nos entrego este producto
        /// </summary>
        public long IdSuplier
        {
            get;
            set;
        }

        /// <summary>
        /// id del almacen que solicito la orden de pedido
        /// </summary>
        public long IdStore
        {
            get;
            set;
        }

        /// <summary>
        /// id del producto
        /// </summary>
        public long IdProduct
        {
            get;
            set;
        }

        /// <summary>
        /// cantidad de productos que se debe ingresar al almacen
        /// </summary>
        public int Quantity
        {
            get;
            set;
        }
    }

    public class CurrencyExchange
    {
        #region " Properties "

        /// <summary>
        /// Fecha de proceso, que nos sirve de referencia para obtener el tipo de cambio.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public DateTime ProcessDate
        {
            get;
            set;
        }

        /// <summary>
        /// Identificador de moneda de ingreso.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public long IdMoneyIncome
        {
            get;
            set;
        }

        /// <summary>
        /// Identificador de la moneda base.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public long IdMoneyBase
        {
            get;
            set;
        }

        /// <summary>
        /// Identificador de moneda de salida.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public long IdMoneyExit
        {
            get;
            set;
        }

        /// <summary>
        /// Descripcion corta de la moneda de ingreso.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public string MoneyIncomeShortDescription
        {
            get;
            set;
        }

        /// <summary>
        /// Descripcion corta de la moneda base.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public string MoneyBaseShortDescription
        {
            get;
            set;
        }

        /// <summary>
        /// Descripcion corta de la moneda de salida.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public string MoneyExitShortDescription
        {
            get;
            set;
        }

        /// <summary>
        /// Monto de ingreso para el tipo de cambio.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public decimal AmmountIncome
        {
            get;
            set;
        }

        /// <summary>
        /// Monto en moneda base del tipo de cambio.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public decimal AmmountBase
        {
            get;
            set;
        }

        /// <summary>
        /// Monto de salida para el tipo de cambio.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public decimal AmmountExit
        {
            get;
            set;
        }

        /// <summary>
        /// Valor que se aplico para el tipo de cambio de moneda de ingreso a moneda base.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public decimal CurrencyExchangeRate
        {
            get;
            set;
        }

        /// <summary>
        /// Valor que se aplico para el tipo de cambio de moneda base a moneda de salida.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public decimal CurrencyExchangeRateAdvanced
        {
            get;
            set;
        }

        /// <summary>
        /// Tipo de cambio a usar para la transaccion, solo se usa para ver tipos de cambio informativos.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public Nullable<decimal> ExchangeRate
        {
            get;
            set;
        }
        
        /// <summary>
        /// Bandera que indica si se realizó una compra o venta
        /// </summary>
        public virtual bool IsCurrencyBuy
        {
            get;
            set;
        }

        /// <summary>
        /// Bandera que indica si se realizó un tipo de cambio avanzado.
        /// </summary>
        public bool AdvancedExchange
        {
            get;
            set;
        }

        #endregion

        #region " Properties - References "

        /// <summary>
        /// Moneda de ingreso.
        /// </summary>
        /// <remarks>
        /// </remarks>
        public Classifier ObjMoneyIncome
        {
            get;
            set;
        }

        /// <summary>
        /// Moneda base.
        /// </summary>
        public Classifier ObjMoneyBase
        {
            get;
            set;
        }

        /// <summary>
        /// Moneda de salida.
        /// </summary>
        public Classifier ObjMoneyExit
        {
            get;
            set;
        }
        #endregion
    }

    /// <summary>
    /// entidad pa el grid de punto de venta.
    /// </summary>
    public class SalesOrderDetailInStock
    {
        public long IdProduct { get; set; }
        public string Product { get; set; }
        public decimal UnitPriceReal { get; set; }
        public decimal UnitPrice { get; set; }
        public int OrderQuantity { get; set; }
        public decimal LineTotal { get; set; }
        public bool WithGuarantee { get; set; }
        public int StockQuantity { get; set; }
    }

    /// <summary>
    /// entidad pa el grid de busqueda de productos en el punto de venta.
    /// </summary>
    public class ProductInStock
    {
        public long IdProduct { get; set; }
        public string Model { get; set; }
        public string Category { get; set; }
        public string Mark { get; set; }
        public bool WithGuarantee { get; set; }
        public int StockQuantity { get; set; }
    }

    /// <summary>
    /// Clase para la transferencia de stock entre almacenes.
    /// </summary>
    public class StockTransfer
    {
        public long IdProduct { get; set; }
        public int StockQuantity { get; set; }
        public long IdStoreOrigen { get; set; }
        public long IdStoreDestiny { get; set; }
    }
}
